/**
 * 登录
 *
 * @author Richard
 */

class WXlogin {
    /**
     * 初始化方法，在页面的onLoad     方法中调用
     * @param  {Object}     app     传入的对象
     * @param  {Object}     api     传入的接口对象
     */
    constructor(app, api) {
        this.app = app;
        this.api = api;
        this.app.globalData.loginStatus = false
        this.init = this._init(); //对象初始化
    }

    _init() {
        let _this = this;

        _this.checkSession() //检查登录状态是否过期
            // _this.getOpenId() //获取openId
        _this.getUserInfo() //获取用户信息
    }

    getOpenId() {
        let _this = this;

        console.log('getOpenId')
        wx.getStorage({
            key: 'openid',
            success: function(res) {
                let data = res.data;
                if (data) {
                    console.log('缓存获取openid成功');
                    _this.app.globalData.openid = data;
                }
            },
            fail: function(err) {
                console.log('缓存获取openid失败')
                _this.login();
            }
        })
    }

    checkSession() { //校验用户当前session_key是否有效
        let _this = this

        console.log('checkSession')
        wx.checkSession({
            success: function(res) {
                //session_key 未过期，并且在本生命周期一直有效
                console.log('session_key 未过期')
            },
            fail: function(err) {
                // session_key 已经失效，需要重新执行登录流程
                console.log('session_key 已经失效')
                _this.app.globalData.loginStatus = false;
                _this.login() //重新登录

            }
        })
    }

    getUserInfo() { //获取用户信息
        let _this = this;

        wx.getStorage({
            key: 'userInfo',
            success: function(res) {
                console.log('用户信息未失效!')
                _this.app.globalData.userInfo = res.data;
                return
            },
            fail: function(err) {
                console.log('缓存中获取用户信息失败', err)
                wx.getSetting({
                    success: function(res) {
                        if (!res.authSetting['scope.userInfo']) {
                            console.log('用户没有授权用户信息，暂无法获取')
                            return
                        } else {
                            wx.getUserInfo({
                                success: function(res) {
                                    console.log('成功获取用户信息')
                                    _this.app.globalData.userInfo = res.userInfo
                                    wx.setStorage({
                                        key: 'userInfo',
                                        data: res.userInfo,
                                        success: function(res) {
                                            console.log('userInfo写入缓存成功', res)
                                        }
                                    })
                                },
                                fail: function(res) {
                                    console.log('wx.getUserInfo 接口调用失败，将无法获取用户信息', res)
                                }
                            })
                        }
                    }
                })
            }
        })
    }　

    login() { //登录获取openId和会话密钥
        let _this = this;

        wx.login({
            success: function(res) {
                const code = res.code
                if (code) {
                    let dataDic = {
                        appid: _this.app.globalData.appId,
                        secret: _this.app.globalData.appSecret,
                        js_code: code,
                    };
                    _this.api.methodRequestWechatAPI({
                        dataDic,
                        success: (res) => {
                            const data = res.data;
                            // console.log('119', data)
                            if (data.code != 0) {
                                console.log(res.data)
                            } else {
                                console.log('获取用户openId成功', data.data)
                                _this.app.globalData.openId = data.data.openid;
                                _this.app.globalData.session_key = data.data.session_key;
                                wx.setStorage({
                                    key: 'openid',
                                    data: data.data.openid,
                                    success: function(res) {
                                        console.log('openId写入缓存成功', res)
                                    }
                                })
                                wx.setStorage({
                                    key: 'session_key',
                                    data: data.data.session_key,
                                    success: function(res) {
                                        console.log('session_key写入缓存成功', res)
                                    }
                                })
                            }
                        },
                        fail: (res) => {
                            console.log('拉取用户openid失败，将无法正常使用开放接口等服务', res);
                            _this.app.globalData.loginStatus = false
                            wx.showModal({
                                title: '温馨提示',
                                content: '暂时无法为您提供服务，请稍后尝试重启小程序',
                                showCancel: false,
                                success: function(res) {
                                    if (res.confirm) {
                                        console.log('用户点击确定')
                                    }
                                }
                            })
                        },
                        complete: (res) => {
                            console.log(res);
                        }
                    });
                }
            }
        })
    }
}

module.exports = WXlogin